package com.fzkj.project.service.impl;

import com.fzkj.common.core.domain.entity.SysUser;
import com.fzkj.common.exception.ServiceException;
import com.fzkj.common.utils.DateUtils;
import com.fzkj.common.utils.SecurityUtils;
import com.fzkj.common.utils.ShiroUtils;
import com.fzkj.project.entiy.ProNj;
import com.fzkj.project.entiy.ProZy;
import com.fzkj.project.entiy.SysUserAuth;
import com.fzkj.project.mapper.ProNjMapper;
import com.fzkj.project.mapper.ProZyMapper;
import com.fzkj.project.mapper.SysUserAuthMapper;
import com.fzkj.project.service.IProNjService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 年级管理Service业务层处理
 * 
 * @author zhangmx
 * @date 2024-05-11
 */
@Service
public class ProNjServiceImpl implements IProNjService
{
    @Autowired
    private ProNjMapper proNjMapper;

    @Autowired
    private ProZyMapper proZyMapper;

    @Autowired
    private SysUserAuthMapper sysUserAuthMapper;

    /**
     * 查询年级管理
     * 
     * @param id 年级管理主键
     * @return 年级管理
     */
    @Override
    public ProNj selectProNjById(String id)
    {
        return proNjMapper.selectProNjById(id);
    }

    /**
     * 查询年级管理列表
     * 
     * @param proNj 年级管理
     * @return 年级管理
     */
    @Override
    public List<ProNj> selectProNjList(ProNj proNj) {
        return proNjMapper.selectProNjList(proNj);
    }

    /**
     * 新增年级管理
     * 
     * @param proNj 年级管理
     * @return 结果
     */
    @Override
    public int insertProNj(ProNj proNj)
    {
//        proNj.setId(String.valueOf(SnowFlake.nextId()));

        // 校验编号不能重复
        ProNj nj = new ProNj();
        nj.setNumber(proNj.getNumber());
        List<ProNj> proNjs = proNjMapper.selectProNjList(nj);
        if (!proNjs.isEmpty()) {
            throw new ServiceException("编号不能重复");
        }

        proNj.setCreateTime(DateUtils.getNowDate());

        //新增分配权限
        SysUser user = ShiroUtils.getSysUser();
        SysUserAuth sysUserAuth = new SysUserAuth();
        sysUserAuth.setUserId(user.getUserId());
        sysUserAuth.setBusId(proNj.getId());
        sysUserAuth.setType("nj");
        sysUserAuthMapper.insertSysUserAuth(sysUserAuth);
        return proNjMapper.insertProNj(proNj);
    }

    /**
     * 修改年级管理
     * 
     * @param proNj 年级管理
     * @return 结果
     */
    @Override
    public int updateProNj(ProNj proNj) {
        List<ProNj> proNjs = proNjMapper.selectProNjByIdAndNumber(proNj.getId(), proNj.getNumber());
        if (proNjs.size() > 0) {
            throw new ServiceException("编号不能重复");
        }
        return proNjMapper.updateProNj(proNj);
    }

    /**
     * 批量删除年级管理
     * 
     * @param ids 需要删除的年级管理主键
     * @return 结果
     */
    @Override
    public int deleteProNjByIds(String[] ids)
    {
        for (String id : ids) {
            ProZy proZyPram = new ProZy();
            proZyPram.setpId(id);
            List<ProZy> proZyList = proZyMapper.selectProZyList(proZyPram);
            if (!proZyList.isEmpty())
                throw new ServiceException("年级名下有未删除的专业，不允许删除");
        }
        return proNjMapper.deleteProNjByIds(ids);
    }

    /**
     * 删除年级管理信息
     * 
     * @param id 年级管理主键
     * @return 结果
     */
    @Override
    public int deleteProNjById(String id)
    {

        ProZy proZyPram = new ProZy();
        proZyPram.setpId(id);
        List<ProZy> proZyList = proZyMapper.selectProZyList(proZyPram);
        if (!proZyList.isEmpty())
            throw new ServiceException("年级名下有未删除的专业，不允许删除");

        return proNjMapper.deleteProNjById(id);
    }
}
